home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / ami_nuweb0.87c.lha / output.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-12  |  2.0 KB  |  66 lines

  1. #include "global.h"
  2. void write_files(Name *files)
  3. {
  4.   while (files) {
  5.     write_files(files->llink);
  6.     {
  7.       char indent_chars[500];
  8.       FILE *temp_file;
  9.       char *temp_name = tmpnam(NULL);
  10.     #ifdef __SASC
  11.       temp_name += 2; /* Bump temp_name by 2 characters to get past the "T:"
  12.         that is tacked on by SAS/C. */
  13.     #endif
  14.       temp_file = fopen(temp_name, "w");
  15.       if (!temp_file) {
  16.     #ifdef _AMIGA
  17.         fprintf(stderr, get_string(MSG_ERROR_38),
  18.     #else
  19.         fprintf(stderr, "%s: can't create %s for a temporary file\n",
  20.     #endif
  21.                 command_name, temp_name);
  22.         exit(EXIT_FAILURE);
  23.       }
  24.       if (verbose_flag)
  25.     #ifdef _AMIGA
  26.         fprintf(stderr, get_string(MSG_VERBOSE_17A), files->spelling);
  27.     #else
  28.         fprintf(stderr, "writing %s\n", files->spelling);
  29.     #endif
  30.       write_scraps(temp_file, files->defs, 0, indent_chars,
  31.                    files->debug_flag, files->tab_flag, files->indent_flag);
  32.       fclose(temp_file);
  33.       if (compare_flag)
  34.         {
  35.           FILE *old_file = fopen(files->spelling, "r");
  36.           if (old_file) {
  37.             char x[BUFSIZ], y[BUFSIZ];
  38.             int x_size, y_size;
  39.             temp_file = fopen(temp_name, "r");
  40.             do {
  41.               x_size = fread(x, 1, BUFSIZ, old_file);
  42.               y_size = fread(y, 1, BUFSIZ, temp_file);
  43.             } while ((x_size == y_size) && !memcmp(x, y, x_size) &&
  44.                      !feof(old_file) && !feof(temp_file));
  45.             if ((x_size != y_size) || memcmp(x, y , x_size)) {
  46.               fclose(old_file);
  47.               fclose(temp_file);
  48.               remove(files->spelling);
  49.               rename(temp_name, files->spelling);
  50.             } else {
  51.               fclose(old_file);
  52.               fclose(temp_file);
  53.               remove(temp_name);
  54.             }
  55.           }
  56.           else
  57.             rename(temp_name, files->spelling);
  58.         }
  59.       else {
  60.         remove(files->spelling);
  61.         rename(temp_name, files->spelling);
  62.       }
  63.     }
  64.     files = files->rlink;
  65.   }